package dog

// mysql配置信息结构体
type MysqlConfig struct {
    User           string       //数据库用户名
    Passwd         string       //密码
    Ip             string       //ip地址 例子：127.0.0.1
    Port           string       //数据库端口号
}

// service配置信息结构体
type ServiceConfig struct {
    Ip             string       //服务ip地址
    Port           string       //服务端口号
    MaxServiceNum  int          //最大可注册服务数
}

// lru结构体
type LruConfig struct {
    Capacity      string        //lru容量大小
}

// core结构体, 系统核心配置信息
type CoreConfig struct {
    JobQueueCapacity     string        // JobQueue 容量
    MaxWorkerNum         string        // 最大工作线程数
}

// redis结构体, reids配置信息
type RedisConfig struct {
    UserName             string        // redis用户密码
    Password             string        // redis密码
    Ip                   string        // redis Ip地址
}

// 系统配置信息
type Config struct {
    Redis         RedisConfig   //redis配置信息
    Mysql         MysqlConfig   //mysql数据库配置信息
    Service       ServiceConfig //service 配置信息
    Lru           LruConfig     //lru 配置信息
    Logfile       string        //日志文件名字
    LogLevel      []string      //日志等级
    Core          CoreConfig    //系统核心配置
}

/*********************全局声明**********************/
//Job Interface 声明，每个服务应该实现该接口
type Ijob interface {
    UnpackRequest()
    Do()
    PackResponse()
}
/*********************全局声明**********************/

/*********************全局变量**********************/
/* 核心分发队列 */
var JobQueue chan Ijob

//全局配置文件
var config Config

var workMap map[string] Ijob = func() map[string] Ijob {
    cfg := ConfigFactory()
    //分配最大服务类型数
    return make(map[string]Ijob, cfg.Service.MaxServiceNum)
}()
/*********************全局变量**********************/

// 返回全局配置信息结构题
func ConfigFactory() *Config {
    return &config
}

func WorkMapFactory() map[string] Ijob{
    return workMap
}

/* 这是一个错误的例子，千万不要返回map类型的指针
map类型的指针 不支持map[...] 这样的操作
func TestMapFactory() *map[int] int {
    return *TestMap
}
*/
